/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import EnderecoEstoque.CadastroEnderecoEstoque;
import EnderecoEstoque.EnderecoEstoque;
import EnderecoEstoque.EnderecoEstoqueJaCadastradoException;
import EnderecoEstoque.EnderecoEstoqueNaoCadastradoException;
import EnderecoEstoque.RepositorioEnderecoEstoque;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Tulio José
 */
public class ControladorEnderecoEstoque {

    private RepositorioEnderecoEstoque objRepositorioEnderecoEstoque;

    /**
     * 
     * @param objrepoEnderecoEstoque
     * @throws ErroAcessoRepositorioException 
     */
    public ControladorEnderecoEstoque(RepositorioEnderecoEstoque objRepositorioEnderecoEstoque) throws ErroAcessoRepositorioException {
        this.objRepositorioEnderecoEstoque = objRepositorioEnderecoEstoque;
    }

    /**
     * Metodo que ira cadastrar os objetos EnderecoEstoque
     * @param objRepositorioEnderecoEstoque
     * @throws EnderecoEstoqueJaCadastradoException
     * @throws CamposObrigatoriosException
     * @throws ErroAcessoRepositorioException 
     */
    public void cadastar(EnderecoEstoque objEnderecoEstoque) throws EnderecoEstoqueJaCadastradoException, CamposObrigatoriosException, ErroAcessoRepositorioException {
        CadastroEnderecoEstoque objCadastroEnderecoEstoque = new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque);
        
        Boolean bolStatus = (Boolean) objEnderecoEstoque.getStatusEnderecoEstoque();

        //Validações da minha classe.
        if (objEnderecoEstoque.getDescricaoEndereco().trim().length() == 0)     throw new CamposObrigatoriosException("Descrição Endereco");
        if (objEnderecoEstoque.getRuaEstoque().trim().length() == 0)            throw new CamposObrigatoriosException("Rua Endereço");
        if (objEnderecoEstoque.getObjEmpresa().getIdEmpresa() == 0)             throw new CamposObrigatoriosException("Empresa Não Informada");

        objEnderecoEstoque.setStatusEnderecoEstoque(bolStatus);
        
        
        objCadastroEnderecoEstoque.cadastrarAtualizar(objEnderecoEstoque);
    }

    /**
     * Metodo que ira atualizar os objetos EnderecoEstoque
     **/
    public void atualizar(EnderecoEstoque objEnderecoEstoque) throws EnderecoEstoqueJaCadastradoException, CamposObrigatoriosException, ErroAcessoRepositorioException {
        CadastroEnderecoEstoque objCadastroEnderecoEstoque = new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque);

        //Validações da minha classe.
        objCadastroEnderecoEstoque.cadastrarAtualizar(objEnderecoEstoque);
        Boolean bolStatus = (Boolean) objEnderecoEstoque.getStatusEnderecoEstoque();

        //validação da minha classe

        if (objEnderecoEstoque.getDescricaoEndereco().trim().length() == 0) {
            throw new CamposObrigatoriosException("Descrição Endereço");
        }
        if (objEnderecoEstoque.getRuaEstoque().trim().length() == 0) {
            throw new CamposObrigatoriosException("Rua Endereço");
        }

        if (objEnderecoEstoque.getIdEndereco() <= 0) {
            throw new CamposObrigatoriosException("Id Endereço");
        }
        objEnderecoEstoque.setStatusEnderecoEstoque(bolStatus);

    }

    /**
     * Método que ira procurar um determinado objeto EnderecoEstoque na base pelo seu Id
     * 
     * @param idEnderecoEstoque
     * @throws EnderecoEstoqueNaoCadastradoException
     * @throws ErroAcessoRepositorioException 
     * @return EnderecoEstoque
     */
    public EnderecoEstoque procurar(int idEnderecoEstoque) throws ErroAcessoRepositorioException,CamposObrigatoriosException,EnderecoEstoqueNaoCadastradoException {
        
        CadastroEnderecoEstoque objCadastroEnderecoEstoque = new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque); 
        //validando os campos
        if(idEnderecoEstoque==0)throw new CamposObrigatoriosException("Id Endereço Estoque");
        
        return objCadastroEnderecoEstoque.procurar(idEnderecoEstoque);
    }

    /**
     * Método que ira verificar a existência da um objeto EnderecoEstoque
     * @param idEnderecoEstoque
     * @throws ErroAcessoRepositorioException 
     * @return boolean
     */
    public boolean existe(int idEnderecoEstoque) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroEnderecoEstoque objCadastroEnderecoEstoque = new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque);
        
        // Validando os campos
        if(idEnderecoEstoque==0)throw new CamposObrigatoriosException("Id Endereço Estoque");
        //Procurando native base O EndereçoEstoque
        return objCadastroEnderecoEstoque.existe(idEnderecoEstoque);
        
    }

    /**
     * Método que ira listar os objetos Endereco Estoque na case
     * 
     * @return List<EnderecoEstoque>
     * @throws Exception
     * @throws ErroAcessoRepositorioException 
     */
    public List<EnderecoEstoque> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException{
        CadastroEnderecoEstoque objCadastroEnderecoEstoque = new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque);
        
        return objCadastroEnderecoEstoque.listar(strComplemento);
        
        
    }

    /**
     * Método que ira remover um objeto EnderecoEstoque da base
     * 
     * @param idEnderecoEstoque
     * @throws EnderecoEstoqueNaoCadastradoException
     * @throws ErroAcessoRepositorioException 
     */
    public void remover(int idEnderecoEstoque) throws EnderecoEstoqueNaoCadastradoException, ErroAcessoRepositorioException{
        CadastroEnderecoEstoque objCadastroEnderecoEstoque =new CadastroEnderecoEstoque(this.objRepositorioEnderecoEstoque);
       
        objCadastroEnderecoEstoque.remover(idEnderecoEstoque);
    }
    


    
   
}
